perm filename F4PAG.F4[PAG,LCS] blob
sn#600693 filedate 1981-07-14 generic text, type T, neo UTF8
C***** F4PAG.F4 *********
C**** SHFTQ, SORT2, NORH, MINMAX, PFIBX, PFIB, RLOOP, BLTEM
C**** GETPTS, SETN, EXTEN, DBAR, ADRST,QRN, SORT, SHIFT,SHFT1
C**** SHFT0,PSHFT,STAFF, RIGHT, RESTS, EXCHG, EXCH, INMUS, RCURVE
C**** SHRNK, EXPND, SLRV,CLEFN, MMNN, CODEN, ZERO, BARFAC
SUBROUTINE SHFTQ(R)
COMMON /JN/JN,JX /XRN/MM(1) /Q/Q(1)
DO 1 K=1,JX
L=MM(K)
1 Q(L)=Q(L)+R
C SHIFTS ALL POSITION PARAMS.
END
SUBROUTINE SORT2(RPOS,M)
DIMENSION RPOS(2,200)
L=2
3 J=-1
RX=RPOS(1,L-1)
DO 2 K=L,M
IF(RPOS(1,K).GE.RX)GO TO 2
RX=RPOS(1,K)
J=K
2 CONTINUE
IF(J.LT.0)GO TO 4
K=L-1
C EXCHANGE THE POSITIONS IN THE LIST
RX=RPOS(1,K)
RPOS(1,K)=RPOS(1,J)
RPOS(1,J)=RX
RX=RPOS(2,K)
RPOS(2,K)=RPOS(2,J)
RPOS(2,J)=RX
4 L=L+1
IF(L.LE.M)GO TO 3
END
FUNCTION NORH(KK,K)
COMMON /XRN/R(500),NN(1)
C FIND VALUE IN NN ARRAY IN DO LOOP.
KK=NN(K)
NORH=0
IF(KK.LE.0)GO TO 1
C NORH=-1 IF KK≤0, >18, NOT 1,2,4,17.
IF(KK.LE.2.OR.KK.EQ.4)RETURN
IF(KK.EQ.17.OR.KK.EQ.18)RETURN
1 NORH=-1
END
SUBROUTINE FNDEND(R)
COMMON /XRN/RN(500),NN(1) /ENDL/ENDLN
K=1
1 N=NN(K)
IF(N.LE.0)GO TO 2
IF(N.LE.3.OR.N.EQ.17.OR.N.EQ.18)GO TO 3
2 K=K+1
GO TO 1
C ASSUMES IT WILL ALWAYS END PROPERLY
3 R=ENDLN+2.0-RN(K)
END
SUBROUTINE MINMAX(JRN)
COMMON /MNX/MIN,MAX,JT
DIMENSION JRN(1)
C GET FIRST VALUE OF CURRENT JRN ARRAY
MIN=JRN(1)
MAX=MIN
DO 107 K=1,JT
NN=JRN(K)
IF(NN.LT.MIN)MIN=NN
107 IF(NN.GT.MAX)MAX=NN
END
FUNCTION PFIBX(A)
DATA FIB/0.618/, RFIB/-.382/
PFIBX=14.
IF(A.EQ.1.)RETURN
Z=FIB
X=ALOG(A)/0.6931472
RH=ABS(X)
IF(X.LE.0)Z=RFIB
L=RH
IF(L.EQ.0)GO TO 4
DO 3 K=1,L
3 PFIBX=PFIBX+PFIBX*Z
4 RH=RH-L
IF(RH.EQ.0)RETURN
PFIBX=PFIBX+PFIBX*Z*RH
C SEND BACK THE RESULT
END
FUNCTION PFIB(P)
C PSEUDO-FIBONACCI RHYTHM SPACER
PFIB=(P+(.125-P)*(.8+.02*P))*50
END
SUBROUTINE RLOOP(A,B,K)
DIMENSION A(1),B(1)
DO 1 J=1,K
1 A(J)=B(J)
END
C BLTEM BLTS (WHEN IN FAIL) ARRAYS KPN AND Q INTO KWDS AND RN
SUBROUTINE BLTEM
COMMON /XRN/RN(1) /PTR/KWDS(1) /PX/KPN(1) /Q/Q(1)
COMMON /POSI/STFF(8),JJ2,JPQ /RCLF/KK,CLEF,KW,ITEM
CC DO 1511 K=1,ITEM+1
CC1511 KWDS(K)=KPN(K)
CC DO 1611 K=1,JPQ
CC1611 RN(K)=Q(K)
CALL RLOOP(KWDS,KPN,ITEM+1)
CALL RLOOP(RN,Q,JPQ)
END
SUBROUTINE GETPTS(NX,RN,KWDS)
C 'NX' DOES NOT SEEM TO BE USED
DIMENSION RN(1),KWDS(1)
COMMON/KNR/N(1) /NNP/NP(1) /LLL/LLL
COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS
COMMON/POSI/STFF(8),JJ2,JPQ /KJY/ K,J
EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3))
J=0
K=0
CC JX=JJ2
C GET THE STAFF NUM. (NEG= ALL IN THIS PROG.)
DO 1 M=1,LLL
L=KWDS(M)
IF(R2.LT.0)GO TO 9
IF(RN(L+1).NE.R2)GO TO 1
C NEG R2=ALL STAVES CHECK NOW FOR CORRECT STAFF
9 X=RN(L+3)
IF(X.LT.R4.OR.X.GT.R5)GO TO 2
C NOW P3 IS IN LIMITS
IF(JJ2.LE.0)JJ2=M
J=J+1
CC MOVEI 0,(L)
K=K+1
NP(K)=L
C NP LIST POINTS TO START OF EACH ITEM TO MOVE
N(J)=L+3
C N LIST POINTS TO PARAM TO BE MOVED
C NP IS FOR USE IN JUSTIFY ROUTINE
2 RY=RN(L+1)
C RY IS CODE NUMBER OF ITEM
IF(RY.EQ.2.)GO TO 99
C JUMP IF REST
IF(RY.LT.4)GO TO 1
RZ=RN(L)
C RZ IS WDCNT. CODE 4 IS SOMETIMES =44
IF(RY.NE.44.)GO TO 98
IF(RZ.LE.2.)GO TO 1
GO TO 5
C IF(RZ.LE.2)THEN IT'S A CODE 44 BAR LINE.
C FOUND A LINE
98 IF(RY.GT.7.)GO TO 1
C TWO-ENDED ITEM?
GO TO (4,5,6,7),IFIX(RY)-3
7 IF(RZ.GT.4.)GO TO 1
C FOR TRILL??
4 IF(RZ.GT.3.)GO TO 5
C CHECK WDCNT
GO TO 1
99 RZ=RN(L)
C FOR 'CENTERED' RESTS
GO TO 8
6 IF(RZ.LT.8.)GO TO 8
IF(RN(L+7).LT.0)GO TO 8
C THESE ARE FOR VARIOUS BEAM PARAMS.
IF(RN(L+10).EQ.0)GO TO 8
C IGNORE P8 IF IT IS 0 OR -
X=RN(L+8)
IF(X.LE.0)GO TO 8
IF(X.LT.R4)GO TO 8
IF(X.GT.R5)GO TO 8
C NOW P8 IS IN LIMITS
CALL SETN(L+8,M)
C FIND LOWEST ITEM NUMBER NEEDED
C SAVE POINTER TO P8 FOR MOVING.
8 IF(RZ.LT.7.)GO TO 5
C JUMP IF WDCNT IS .LT. 7
IF(RN(L+9).LE.0)GO TO 5
IF(RY.EQ.2.)GO TO 97
C NEW CENTERED RESTS HAS POSITION IN P9
IF(RN(L+8).NE.0)GO TO 97
IF(RN(L+7).GE.0)GO TO 5
97 X=RN(L+9)
IF(X.LT.R4)GO TO 5
IF(X.GT.R5)GO TO 5
C NOW P9 IS IN LIMITS
CALL SETN(L+9,M)
5 IF(RY.EQ.2.)GO TO 1
X=RN(L+6)
IF(X.LT.R4)GO TO 1
IF(X.GT.R5)GO TO 1
C NOW P6 IS IN LIMITS
CALL SETN(L+6,M)
1 CONTINUE
END
SUBROUTINE SETN(L,M)
COMMON/POSI/STFF(8),JJ2 /KJY/ K,J /KNR/N(1)
IF(JJ2.GT.M)JJ2=M
C FIND LOWEST ITEM NUMBER NEEDED
J=J+1
N(J)=L
END
SUBROUTINE MOVIT(RN,NP,R4,R5,R8,R9)
DIMENSION NP(1),RN(1)
COMMON /KJY/ KD,J
RDIS=(R9-R8)/(R5-R4)
DO 1 K=1,J
L=NP(K)
RA=RN(L)
IF(RA.LT.R4)GO TO 1
IF(RA.GT.R5)GO TO 1
C NOW IN BOUNDS
IF(R9.NE.0)RA=(RA-R4)*RDIS
RN(L)=R8+RA
1 CONTINUE
END
FUNCTION EXTEN(X)
EXTEN=AMOD(X,1.)*10.
END
SUBROUTINE DBAR(K,ITEM,J)
COMMON /XRN/RN(1) /RR/RR /PTR/KWDS(1)
RR=RN(J+3)
C SAVE POSITION OF ITEM. ALSO USED IN ADRST ROUTINE.
DO 82 KY=K+1,ITEM
KZ=KWDS(KY)
IF(RN(KZ+1).NE.4.)GO TO 82
IF(RN(KZ).GT.3.)GO TO 82
C CHECK THE WDCNT
IF(ABS(RR-RN(KZ+3)).GT..5)GO TO 82
C AVOIDS DUPLICATE BARS.
RN(KZ+2)=99.
RN(KZ+1)=0
82 CONTINUE
END
SUBROUTINE ADRST(JWDS,RA)
COMMON /XXX/LK,LP,JY /Q/Q(1) /RR/RR /LLL/LLL
DIMENSION JWDS(1)
Q(LK)=6.
Q(LK+1)=2.
C SET UP THE REST
Q(LK+2)=0
Q(LK+3)=RR-1.
C GET POSITION FROM ROUTINE ABOVE
Q(LK+4)=0
Q(LK+5)=0
Q(LK+6)=0
Q(LK+7)=6.
Q(LK+8)=-1.
C NEXT ADDS A BAR LINE
LK=LK+9
JWDS(LLL+1)=LK
CHECK THIS ******************
Q(LK)=2.
Q(LK+1)=4.
Q(LK+2)=0
Q(LK+3)=RR
Q(LK+4)=RA
LK=LK+5
JWDS(LLL+2)=LK
LLL=LLL+2
END
SUBROUTINE QRN(J,JWDS,K)
DIMENSION JWDS(1)
COMMON RS,JA,REST,J2,RQ(2),R5
COMMON /XRN/RN(1) /PTR/KWDS(1) /XXX/LK /Q/Q(1) /LLL/LLL
COMMON /RCLF/RCLF,CLEF /SF/KL
JA=KWDS(K+1)
LX=LK
DO 7 KY=J,JA-1
Q(LK)=RN(KY)
7 LK=LK+1
IF(KL.EQ.0)GO TO 5
C PUT A 1.0 AS RHYTHM FOR REST OR NOTE
LK=LK+KL-1
Q(LK)=1.
C PUT IT IN PARAM 7 OR 9
CC5 LK=LK+1
5 IF(R5.LT.0)GO TO 2
Q(LX+5)=R5
WDC=3.
3 LK=LK+WDC-Q(LX)
C UPDATE THE MAIN COUNTER
Q(LX)=WDC
GO TO 1
2 IF(RCLF.NE.17.)GO TO 1
Q(LX+6)=CLEF
C GET THE CLEF NUM.
WDC=4.
GO TO 3
1 JWDS(LLL+1)=LK
LLL=LLL+1
END
SUBROUTINE SORT(JWDS)
DIMENSION JWDS(1)
COMMON /LLL/LLL /Q/Q(1) /XRN/RN(1) /PTR/KWDS(1)
I=1
DO 243 K=1,LLL-1
LB=JWDS(K)+1
IF(Q(LB).NE.16.)GO TO 243
IF(Q(LB-1).LT.8.)GO TO 243
JL=JWDS(K-1)
244 Q(LB+2)=Q(JL+3)
243 CONTINUE
C PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
C FOR SPACING PROBLEMS BELOW.
M=2
J=1
24 RA=100000.
C POSITION
DO 21 K=1,LLL-1
JL=JWDS(K)+3
R=Q(JL)
IF(R.EQ.100000.)GO TO 21
241 IF(ABS(R-RA).GT..1)GO TO 240
Q(JL)=RA
GO TO 21
CC PUT IN HERE MULTI-VOICE TRAP SOMEDAY
240 IF(R.GT.RA)GO TO 21
C LINES THEM UP
RA=R
CC I=JL-3
I=K
21 CONTINUE
IF(RA.EQ.100000.)RETURN
C JUMP IF ALL SORTED
242 JL=JWDS(I)
LA=JL
N=Q(JL)+3
KWDS(M)=KWDS(M-1)+N
M=M+1
DO 22 K=J,J+N-1
RN(K)=Q(JL)
22 JL=JL+1
J=J+N
Q(LA+3)=100000.
GO TO 24
END
SUBROUTINE SHIFT
COMMON /PX/KPN(1) /Q/Q(1) /LLL/LLL
K=1
L=1
LK=0
221 NN=KPN(K)
IF(Q(NN+1).LT.0)GO TO 321
M=KPN(K+1)
2 Q(L)=Q(NN)
NN=NN+1
IF(NN.GE.M)GO TO 1
L=L+1
GO TO 2
1 LK=LK+1
L=L+1
KPN(LK+1)=L
C SET NEXT POINTER
321 K=K+1
IF(K.LT.LLL)GO TO 221
LLL=LK
END
SUBROUTINE SHFT1(KQ)
COMMON /LLL/L /Q/Q(1) /XRN/RN(1) /PX/KPN(1) /IPG/IPG
L=1
K=1
220 JJ=Q(K)+3
KPN(L)=K
C NEW POINTER
IF(Q(K+1).NE.2.OR.Q(K).LT.6)GO TO 1
JK=JJ+K
IF(Q(JK+1).NE.10.OR.Q(JK).LT.6)GO TO 1
IF(IPG.EQ.0)GO TO 1
C do next only when extracting parts(IPG.NE.0)
M=0
KK=Q(JK)+2
DO 2 N=K,K+KK+JK-1
M=M+1
2 RN(M)=Q(N)
M=JK-K
J=KK-JK
KA=J+K
NA=K
B=RN(M+3)
C SAVE POS. (P3)
DO 3 N=K,KA-1
Q(N)=RN(M)
3 M=M+1
JK=K+J
M=1
A=RN(4)
C POS OF THIS ITEM
Q(NA+3)=A
RN(4)=B
DO 4 N=JK,KK-1
Q(N)=RN(M)
4 M=M+1
C ALL THIS TO FIND NUM AFTER REST.
C GO BACK TO GET RIGHT PNTRS NOW.
GO TO 220
1 K=K+JJ
IF(K.GE.KQ)GO TO 5
L=L+1
GO TO 220
5 L=L+1
KPN(L)=K
END
SUBROUTINE SHFT0(KQ)
COMMON /LLL/L /XRN/RN(1) /Q/Q(1) /XXX/LK /PTR/KWDS(1)
DO 32 K=1,KWDS(L)-1
KQ=KQ+1
32 Q(KQ)=RN(K)
L=1
LK=1
END
SUBROUTINE PSHFT(I)
COMMON /SF/KL /PX/KPN(1) /Q/Q(1) /XRN/RN(1)
M=KPN(I+1)
DO 31 NA=1,M
RN(KL)=Q(NA)
31 KL=KL+1
END
SUBROUTINE STAFF(P0,P1, P3,P4,P5,P6,P7,P8,P9,P10,P11,P12)
COMMON/XRN/RN(1) /PTR/KWDS(1) /SF/KL,RT,KP
KWDS(KP)=KL
KP=KP+1
RN(KL)=P0
RN(KL+1)=P1
RN(KL+2)=RT
RN(KL+3)=P3
RN(KL+4)=P4
RN(KL+5)=P5
IF(P0.LT.4.)GO TO 1
RN(KL+6)=P6
RN(KL+7)=P7
RN(KL+8)=P8
RN(KL+9)=P9
RN(KL+10)=P10
RN(KL+11)=P11
RN(KL+12)=P12
1 KL=KL+3+P0
END
FUNCTION RIGHT(NA,J,JK)
COMMON /PX/KPN(1) /Q/Q(1) /LLL/LLL,LL,I
K=NA+J
N6=NJ
IF(K.GT.0)GO TO 4
RIGHT=Q(4)
RETURN
4 RX=Q(JK+3)
R=Q(JK+2)
JX=1
IF(J.GT.0)JX=I
C FORWARD LOOP
1 R8=CODEN(KPN,K,Q,LA)
IF(R8.EQ.4)GO TO 2
IF(Q(LA+2).NE.R)GO TO 3
IF(R8.EQ.18..OR.R8.EQ.17.)GO TO 2
C JUMP ON KEY SIG OR METER
3 IF(K.EQ.JX)GO TO 5
K=K+J
GO TO 1
5 IF(J.LE.0)RIGHT=RX
RETURN
C SKIP NEXT IF GOING FORWARD IN LOOP (LOOKING TO RIGHT)
C USE ITS OWN POS.-2 IF NOTHING FOUND TO LEFT
C C NOW FOUND ITEM TO LEFT OR RT ON THIS STAFF.
2 RIGHT=Q(LA+3)
END
SUBROUTINE RESTS
COMMON /PX/KPN(1) /Q/Q(1) /LLL/LLL
XLFT=0
SIG=-99
REST=0
K=1
50 JL=KPN(K)
R=Q(JL+1)
IF(XLFT.NE.0)GO TO 5
IF(R.LE.4)XLFT=Q(JL+3)
GO TO 3
5 IF(R.NE.17)GO TO 3
IF(Q(JL+5).EQ.SIG)GO TO 60
SIG=Q(JL+5)
3 IF(R.NE.2)GO TO 231
IF(Q(JL).GE.6)GO TO 7
GO TO 231
7 IF(Q(JL+8).LE.-4)GO TO 231
IF(Q(JL+7).LE.0)GO TO 231
C (IGNORE NON-RHYTH.)
C CATCH BAR REPEAT SIGN
IF(Q(JL+8).EQ.0)GO TO 231
C (WHOLE REST OVER CUE NOTES)
IF(REST.NE.0)GO TO 6
JR=JL+6
C POINTER TO REST NUM.
R=Q(JR+1)
IF(R.LT.5)R=5
Q(JR+1)=R*.6
C REDUCE SIZE OF REST'S TIME SO IT WILL TAKE LESS SPACE.
6 REST=REST+1.
Q(JR+2)=REST
Q(JR-2)=-2.
C (LOWER THE REST'S POS.)
JL=K+2
IF(JL.GE.LLL)RETURN
LB=KPN(JL)
IF(Q(LB+1).NE.2)GO TO 233
C NEXT IS TO COMBINE MEASURES OF REST
IF(Q(LB).LT.6)GO TO 233
C SKIP NON-WHOLE RESTS
N=KPN(JL-1)
IF(Q(N+1).NE.4.)GO TO 233
C IS REST FOLLOWED BY A BAR? OR RHRSL NUM?(COULD BE A PROB. HERE!!!)
C SO IT WON'T BE FOUND NEXT TIME AROUND.
Q(LB+1)=-1.
C CHANGE CODE #
Q(N+1)=-1.
K=JL
GO TO 6
60 Q(JL+1)=-1.
GO TO 231
233 REST=0
231 K=K+1
IF(K.LT.LLL)GO TO 50
END
SUBROUTINE EXCHG(M,N)
DIMENSION M(2),N(2)
J=M(1)
M(1)=M(2)
M(2)=J
J=N(1)
N(1)=N(2)
N(2)=J
END
SUBROUTINE EXCH(J,K)
L=J
J=K
K=L
END
SUBROUTINE INMUS(NAME,EXT,RN,KWDS,JSTFAC)
DIMENSION RN(1),KWDS(1),JSTFAC(1)
CALL GETEXT(NAME,EXT)
CALL EXTIN(JSTFAC,20)
C READ ONLY 20 WDS IN PAGE ONLY****** NOT [=128]
JJ=JSTFAC(19)
C JSTFAC(19) = THE WD CNT.
C ********** CHANGE JSTFAC ARRAY FOR PDP11 ***************
CALL EXTIN(RN,JJ)
C MOVE @15 ;@R ;IF(R(1).NE.INTEGER 1)GO TO I3
C CAIE 1 ;OLD FORMAT ? ***** ASSUMES NEW FORMAT (NO KWDS ARRAY)
C JRST I3 ;NO
C USETI 12,2 ;YES, READ 2ND RECORD AGAIN (12 =CH)
C JSA 16,EXTIN ;CALL EXTIN(RS,128)
C JUMP @12 ;JUMP @KW
C JUMP =17(11) ;JUMP NWDS ;CALL EXTIN(K,J)
C JRST I1 ;GO BACK AND GET R ARRAY
3 N=1
L=1
KWDS(1)=1
4 N=N+RN(N)+3
C HERE'S THE LOOP
C GET WD CNT -2
L=L+1
C UPDATE THE COUNTER OF THE POINTER LIST
KWDS(L)=N
IF(N.LT.JJ)GO TO 4
END
FUNCTION RCURVE(R)
DIMENSION R(1)
C R(1) IS R3 R(4) IS R6, ETC.
X=R(4)-R(1)
RCURVE=R(6)+1.
IF(RCURVE.LT.0)X=X+RCURVE+RCURVE
X=X/25.
C R8=-2=BETWEEN NOTES, =-3=1ST NOTE IS DOTTED.
RCURVE=X+2.+ABS(R(3)-R(2))/10.
IF(R(5).LT.0)RCURVE=-RCURVE
C IF(R7 WAS .LT.0)KEEP IT NEGATIVE.
END
SUBROUTINE SHRNK(K,IT)
COMMON R2,JA,REST,J2,R3,R4,R5,R6,R7,R8,R9
COMMON /PX/KPN(1) /Q/Q(1) /LLL/LLL,LL,I
L10=IT-1
L11=KPN(IT+1)
C END OF Q DATA
C X=Q(L+3)
K2=K
K12=K2
K3=KPN(K2)
K6=K3
C A13=Q(K3+3)
R8=Q(K3+3)
C POS. OF CLEF TO BE MOVED.
K4=KPN(K2+1)
C PTR TO NEXT ITEM
K1=K4
K3=K3-K4
C WDCNT OF DELETE ITEM
K4=K4-KPN(K2+2)
C NEXT +1
K3=K3-K4
C AMOUNT OF CHANGE
C1 K5=KPN(K2+2)
C K5=K5-KPN(K2+1)
C K5=K5+KPN(K2)
C KPN(K2+1)=K5
1 KPN(K2+1)=KPN(K2+2)-KPN(K2+1)+KPN(K2)
IF(K2.EQ.L10)GO TO 4
K2=K2+1
GO TO 1
4 K2=KPN(K2+1)
C LAST PTR
C A7=Q(K6+3)
R4=Q(K6+3)
C POS FOR LATER "MOVE"
2 Q(K6)=Q(K1)
K1=K1+1
IF(K1.EQ.L11)GO TO 5
K6=K6+1
GO TO 2
5 IT=L10
I=L10
C I=LEND (FOR FINAL ENDPOINT)
C R4=A7
C R8=A13
C R8=EXPAND REMAINDER OF LINE TO CLEF POS.
6 LL=0
C LL=0 (NO JUSTIFY)
R5=200.
R2=0
R9=R5
R7=0
CALL PTMOVE(Q,KPN(K12))
END
C SUBROUTINE EXPND(J)
CC TO SHIFT LINE TO RT. WHEN ADDING KSIG.
C COMMON/STF/RSTFAC(8),RSTJ2
C COMMON R2,JA,REST,J2,R3,R4,R5,R6,R7,R8,R9
C COMMON /PX/KPN(1) /Q/Q(1) /LLL/LLL,LL,I
CC?? A5=5.
C R4=7.1*RSTJ2
C K12=J+2
CC GET PTR TO KPN ADD 2 (FOR NOW, ANYWAY)
C R8=0
CC GO MOVE IT
C6 LL=0
CC LL=0 (NO JUSTIFY)
C R5=200.
C R2=0
C R9=R5
C R7=0
C CALL PTMOVE(Q,KPN(K12))
C END
SUBROUTINE SLRV(KK,C)
COMMON /Q/Q(1)
Q(KK+4)=C+Q(KK+4)
Q(KK+5)=C+Q(KK+5)
C ADD NUM. TO HEIGHT PARAMETERS
Q(KK+7)=-Q(KK+7)
C INVERT THE SLUR
END
FUNCTION CLEFN(Q,J)
DIMENSION Q(1)
CLEFN=0
IF(Q(J).LT.3.)RETURN
CLEFN=Q(J+5)
END
SUBROUTINE MMNN(K)
COMMON /JN/J,N /XRN/MM(500),NN(1)
N=N+1
IF(K.NE.3)NN(N)=-1
C FOR SECONDARY POSITIONS.
MM(N)=J+K
END
FUNCTION CODEN(K,N,R,M)
DIMENSION K(1),R(1)
M=K(N)
CODEN=R(M+1)
C GET THE CODE NUMBER AND SAVE THE POINTER IN M.
END
FUNCTION ZERO(X,Y)
ZERO=X-Y
CC IF(ABS(ZERO).LE..01)ZERO=0
IF(ZERO.LT.0)ZERO=-ZERO
IF(ZERO.LE..01)ZERO=0
END
C DO NEXT IF MORE THAN 1 STAFF(KPG) AND DIFF. SIZE FACTORS ARE FOUND.
SUBROUTINE BARFAC(KPG,BFAC,JK)
COMMON /STF/RSTFAC(8) /XRN/RN(1) /PX/KPN(1) /Q/Q(1) /JN/J
R=RSTFAC(1)
DO 5112 K=2,KPG
5112 IF(R.NE.RSTFAC(K))GO TO 6112
RETURN
C NEXT TO FIND PROBABLE SIZE FACTOR FOR THIS BAR. (NOT FOR PARTS)
C FIND LINE WITH MOST ACTIVITY.
C ALL THIS SORT OF WORKS. SOMEDAY REVIEW IT.********
6112 DO 1112 K=1,8
1112 RN(K)=0
DO 112 K=JK,J-1
JD=KPN(K)
R=Q(JD+1)
IF(R.GT.3.)GO TO 112
A=1.0
C CHECKS FOR NUMBER OF NOTES, RESTS, CLEFS.
IF(R.EQ.2)A=0.6
C SKIP NON-RHYTHM CHORD NOTES. RESTS ARE CONSIDERED LESS IMPORTANT.
IF(R.NE.1)GO TO 4112
IF(Q(JD).LT.7)GO TO 112
IF(Q(JD+9).LE.0)GO TO 112
4112 LF=Q(JD+2)+1
RN(LF)=RN(LF)+A
112 CONTINUE
JD=1
B=RN(1)*RSTFAC(1)
DO 2112 K=2,KPG
A=RN(K)*RSTFAC(K)
IF(A.LE.B)GO TO 2112
JD=K
B=A
2112 CONTINUE
BFAC=BFAC*(RSTFAC(JD)+.1)
C +.1 ABOVE TO MINIMIZE DIFF. IN SIZE FACTOR.
END